package msgcomm.messages;

import java.util.HashMap;

import msgcomm.Receiver;
import msgcomm.VectorClock;


/**
 * 
 * Payload per messaggio di unione ad un gruppo
 *
 */
public class RequestJoinGroup extends RequestPayload{

	private static final long serialVersionUID = -2255291064531728009L;

	/**
	 * Nome di chi fa la richiesta
	 */
	public final String transName;
		
	/**
	 * Membri attuali del gruppo (escluso il richiedente)
	 */
	public final HashMap<String, Receiver> group;
	/**
	 * Vector clock attuale (a seguito dello scambio dei LastData, e' uguale
	 * fra tutti i mebri)
	 */
	public final VectorClock VC;
	
	/**
	 * true in caso di esito positivo dell'unione, false altrimenti
	 */
	public final boolean success;
	
	/**
	 * Costruttore usato da chi invia il messaggio
	 * @param transName
	 */
	public RequestJoinGroup(String transName){
		this.transName=transName;
		this.group=null;
		this.VC=null;
		this.success= false;
	}
	
	/**
	 * Costruttore usato da chi risponde al messaggio
	 * @param transName
	 * @param group
	 */
	public RequestJoinGroup(String transName,HashMap<String,Receiver> group, VectorClock VC, boolean success){
		this.transName=transName;
		this.group=group;
		this.VC=VC;
		this.success= success;
	}
	
	@Override
	public String toString() {
		if (group==null) {
			return "RequestJoinGroup[" + transName + "]";
		} else {
			return "RequestJoinGroup[" + transName + ", " + group.keySet() + ", " + VC + "]";
		}
	}
}
